﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace OpenGL.Enums
{
    static public class GLEnums
    {
        public const uint
            // GetTarget
            GL_LIGHT_MODEL_TWO_SIDE = 0x0B52;
    }

    public enum MatrixMode : uint
    {
        ModelView = 0x1700,
        Projection = 0x1701,
        Texture = 0x1702,
    }
    public enum ClearTarget : uint
    {
        GL_CURRENT_BIT = 0x00000001,
        GL_POINT_BIT = 0x00000002,
        GL_LINE_BIT = 0x00000004,
        GL_POLYGON_BIT = 0x00000008,
        GL_POLYGON_STIPPLE_BIT = 0x00000010,
        GL_PIXEL_MODE_BIT = 0x00000020,
        GL_LIGHTING_BIT = 0x00000040,
        GL_FOG_BIT = 0x00000080,
        GL_DEPTH_BUFFER_BIT = 0x00000100,
        GL_ACCUM_BUFFER_BIT = 0x00000200,
        GL_STENCIL_BUFFER_BIT = 0x00000400,
        GL_VIEWPORT_BIT = 0x00000800,
        GL_TRANSFORM_BIT = 0x00001000,
        GL_ENABLE_BIT = 0x00002000,
        GL_COLOR_BUFFER_BIT = 0x00004000,
        GL_HINT_BIT = 0x00008000,
        GL_EVAL_BIT = 0x00010000,
        GL_LIST_BIT = 0x00020000,
        GL_TEXTURE_BIT = 0x00040000,
        GL_SCISSOR_BIT = 0x00080000,
        GL_ALL_ATTRIB_BITS = 0x000fffff
    }
    public enum SwitchTarget : uint
    {
        GL_COLOR_MATERIAL = 0x0B57,
        GL_DEPTH_TEST = 0x0B71,
        GL_LIGHTING = 0x0B50,
        GL_STENCIL_TEST = 0x0B90,
        GL_CULL_FACE = 0x0B44,
        GL_POLYGON_OFFSET_POINT = 0x2A01,
        GL_POLYGON_OFFSET_LINE = 0x2A02,
        GL_POLYGON_OFFSET_FILL = 0x8037,
        GL_BLEND = 0x0BE2,
        GL_LINE_SMOOTH = 0x0B20
    }
    public enum BeginMode : uint
    {
        GL_POINTS = 0x0000,
        GL_LINES = 0x0001,
        GL_LINE_LOOP = 0x0002,
        GL_LINE_STRIP = 0x0003,
        GL_TRIANGLES = 0x0004,
        GL_TRIANGLE_STRIP = 0x0005,
        GL_TRIANGLE_FAN = 0x0006,
        GL_QUADS = 0x0007,
        GL_QUAD_STRIP = 0x0008,
        GL_POLYGON = 0x0009
    }
    public enum ShaderType : uint
    {
        GL_VERTEX_SHADER = 0x8B31,
        GL_FRAGMENT_SHADER = 0x8B30
    }
    public enum ShaderStatus : uint
    {
        GL_DELETE_STATUS = 0x8B80,
        GL_COMPILE_STATUS = 0x8B81,
        GL_LINK_STATUS = 0x8B82,
        GL_VALIDATE_STATUS = 0x8B83
    }
    public enum ListMode : uint
    {
        GL_COMPILE = 0x1300,
        GL_COMPILE_AND_EXECUTE = 0x1301
    }
    public enum PolygonMode : uint
    {
        GL_POINT = 0x1B00,
        GL_LINE = 0x1B01,
        GL_FILL = 0x1B02
    }
    public enum FaceType : uint
    {
        GL_FRONT = 0x0404,
        GL_BACK = 0x0405,
        GL_FRONT_AND_BACK = 0x0408
    }
    public enum DrawWindowFlag : uint
    {
        // PIXELFORMATDESCRIPTOR flags
        PFD_DOUBLEBUFFER = 0x00000001,
        PFD_STEREO = 0x00000002,
        PFD_DRAW_TO_WINDOW = 0x00000004,
        PFD_DRAW_TO_BITMAP = 0x00000008,
        PFD_SUPPORT_GDI = 0x00000010,
        PFD_SUPPORT_OPENGL = 0x00000020,
        PFD_GENERIC_FORMAT = 0x00000040,
        PFD_NEED_PALETTE = 0x00000080,
        PFD_NEED_SYSTEM_PALETTE = 0x00000100,
        PFD_SWAP_EXCHANGE = 0x00000200,
        PFD_SWAP_COPY = 0x00000400,
        PFD_SWAP_LAYER_BUFFERS = 0x00000800,
        PFD_GENERIC_ACCELERATED = 0x00001000,
        PFD_SUPPORT_DIRECTDRAW = 0x00002000,
    }
    public enum PixelFormat : byte
    {
        PFD_TYPE_RGBA = 0,
        PFD_TYPE_COLORINDEX = 1
    }
    public enum LayerType : sbyte
    {
        PFD_MAIN_PLANE = 0,
        PFD_OVERLAY_PLANE = 1,
        PFD_UNDERLAY_PLANE = -1
    }
    public enum DrawBufferMode : uint
    {
        GL_NONE = 0,
        GL_FRONT_LEFT = 0x0400,
        GL_FRONT_RIGHT = 0x0401,
        GL_BACK_LEFT = 0x0402,
        GL_BACK_RIGHT = 0x0403,
        GL_FRONT = 0x0404,
        GL_BACK = 0x0405,
        GL_LEFT = 0x0406,
        GL_RIGHT = 0x0407,
        GL_FRONT_AND_BACK = 0x0408,
        GL_AUX0 = 0x0409,
        GL_AUX1 = 0x040A,
        GL_AUX2 = 0x040B,
        GL_AUX3 = 0x040C
    }
    public enum LightName : uint
    {
        GL_LIGHT0 = 0x4000,
        GL_LIGHT1 = 0x4001
    }
    public enum LightParameter : uint
    {
        GL_AMBIENT = 0x1200,
        GL_DIFFUSE = 0x1201,
        GL_SPECULAR = 0x1202,
        GL_POSITION = 0x1203
    }
    public enum BlendMode : uint
    {
        GL_ZERO = 0,
        GL_ONE = 1,
        GL_SRC_COLOR = 0x0300,
        GL_ONE_MINUS_SRC_COLOR = 0x0301,
        GL_SRC_ALPHA = 0x0302,
        GL_ONE_MINUS_SRC_ALPHA = 0x0303,
        GL_DST_ALPHA = 0x0304,
        GL_ONE_MINUS_DST_ALPHA = 0x0305,
        GL_DST_COLOR = 0x0306,
        GL_ONE_MINUS_DST_COLOR = 0x0307,
        GL_SRC_ALPHA_SATURATE = 0x0308
    }
    public enum MaterialParameter : uint
    {
        GL_EMISSION = 0x1600,
        GL_SHININESS = 0x1601,
        GL_AMBIENT_AND_DIFFUSE = 0x1602,
        GL_COLOR_INDEXES = 0x1603,
        GL_SPECULAR = 0x1202
        //#define GL_AMBIENT                        0x1200
        //#define GL_DIFFUSE                        0x1201
        //#define GL_SPECULAR                       0x1202
        //#define GL_POSITION                       0x1203
        //#define GL_SPOT_DIRECTION                 0x1204
        //#define GL_SPOT_EXPONENT                  0x1205
        //#define GL_SPOT_CUTOFF                    0x1206
        //#define GL_CONSTANT_ATTENUATION           0x1207
        //#define GL_LINEAR_ATTENUATION             0x1208
        //#define GL_QUADRATIC_ATTENUATION          0x1209
    }
}
